package banksimulator.bank;

import java.util.Date;

/**
 * Transaction类用于描述帐户的一次交易，包括：交易的时间、类型以及数额。
 * @author Rajab
 */
public class Transaction {

    /**
     * 交易的类型。
     */
    public enum Type {
        /** 交易类型为开户*/  ESTABLISH,
        /** 交易类型为取款*/  WITHDRAW,
        /** 交易类型为存款*/  DEPOSIT;

        /**
         * 返回该对象的字符串表示。
         * @return 该对象的字符串表示形式
         */
        @Override
        public String toString() {
            String ret = null;
            switch (this) {
                case ESTABLISH:
                    ret = "开户";
                    break;
                case WITHDRAW:
                    ret = "取出";
                    break;
                case DEPOSIT:
                    ret = "存入";
                    break;
            }
            return ret;
        }
    }
    //交易的提交时间
    private Date commitTime;
    //交易的数额
    private double amount;

    private double balance;

    public double getBalance() {
        return balance;
    }
    //交易的类型
    private Type type;

    /**
     * 根据指定交易类型和数额构造一个新的Transaction对象。
     * @param type 交易的类型
     * @param amount 交易的金额
     */
    public Transaction(Type type, double amount, double balance) {
        commitTime = new Date();
        this.amount = amount;
        this.balance = balance;
        this.type = type;
    }

    /**
     * 获取发生的交易的时间。
     * @return 交易发生的时间
     */
    public Date getCommitTime() {
        return commitTime;
    }

    /**
     * 获取交易的相关金额。
     * @return 交易所产生的金额
     */
    public double getAmount() {
        return amount;
    }

    /**
     * 获取交易的类型。
     * @return 交易的类型
     */
    public Type getType() {
        return type;
    }

    /**
     * 获取关于交易的文字描述。
     * @return 对交易的文字描述
     */
    @Override
    public String toString() {
        return type.toString();
    }
}
